package com.dsdev.moddle;
import com.dsdev.moddle.util.Util;
import com.dsdev.moddle.util.Logger;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
/**
* Universal block ID handling system
*
* @author Diamond Sword Development
*/
public class IDHelper {
public static String getID(String associatedSetting) {
if (IDConfig == null) {
try {
IDConfig = Util.readJSONFile("./data/ids.json");
} catch (IOException ex) {
Logger.error("IDHelper.loadIDs", "Failed to load 'ids.json'!", false, ex);
return null;
}
}
String idmode = (String) IDConfig.get("mode");
if (idmode.equalsIgnoreCase("default")) {
return null;
} else if (idmode.startsWith("file::")) {
return getIDFromFile(idmode.split("::")[1], associatedSetting);
} else {
return getIDFromConfig(idmode, associatedSetting);
}
}
public static String getIDFromConfig(String mode, String setting) {
JSONArray modsArray = (JSONArray) IDConfig.get(mode);
if (modsArray != null) {
for (Object obj : modsArray.toArray()) {
JSONObject mod = (JSONObject) obj;
String modname = (String) mod.get("name");
if (setting.contains(modname)) {
int rangeStart = Integer.parseInt((String) mod.get("range"));
int bump = 0;
if (IDRanges.containsKey(modname)) {
bump = IDRanges.get(modname);
}
IDRanges.put(modname, bump + 1);
return Integer.toString(rangeStart + bump);
}
}
}
return null;
}
public static String getIDFromFile(String filename, String setting) {
JSONObject file = null;
try {
file = Util.readJSONFile("./" + filename);
} catch (IOException ex) {
Logger.error("IDHelper.getIDFromFile", "Failed to load external ID file!", false, ex);
return null;
}
JSONArray modsArray = (JSONArray) file.get("mode");
if (modsArray != null) {
for (Object obj : modsArray.toArray()) {
JSONObject mod = (JSONObject) obj;
String modname = (String) mod.get("name");
if (setting.contains(modname)) {
int rangeStart = Integer.parseInt((String) mod.get("range"));
int bump = 0;
if (IDRanges.containsKey(modname)) {
bump = IDRanges.get(modname);
}
IDRanges.put(modname, bump + 1);
return Integer.toString(rangeStart + bump);
}
}
}
return null;
}
private static JSONObject IDConfig = null;
private static Map<String, Integer> IDRanges = new HashMap<String, Integer>();
}